package Test;

import entity.User;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class TestNoe {
    public static void main(String[] args) throws Exception {
        Class<User> userClass = User.class;

        // 1. 类基本信息
        System.out.println("类名：" + userClass.getName());
        System.out.println("修饰符：" + Modifier.toString(userClass.getModifiers()));
        System.out.println("父类：" + (userClass.getSuperclass() == null ? "无" : userClass.getSuperclass().getName()));

        // 2. 构造方法
        System.out.println("\n构造方法：");
        for (Constructor<?> c : userClass.getDeclaredConstructors()) {
            System.out.println(Modifier.toString(c.getModifiers()) + " " + c.getName() + "(" +
                    String.join(", ", getTypeNames(c.getParameterTypes())) + ")");
        }

        // 属性
        System.out.println("\n属性：");
        for (Field f : userClass.getDeclaredFields()) {
            System.out.println(Modifier.toString(f.getModifiers()) + " " + f.getType().getName() + " " + f.getName());
        }

        // 4. 方法
        System.out.println("\n方法：");
        for (Method m : userClass.getDeclaredMethods()) {
            System.out.println(Modifier.toString(m.getModifiers()) + " " + m.getReturnType().getName() + " " +
                    m.getName() + "(" + String.join(", ", getTypeNames(m.getParameterTypes())) + ")");
        }
    }

    // 辅助方法：将类型数组转换为类型名字符串数组
    private static String[] getTypeNames(Class<?>[] types) {
        String[] names = new String[types.length];
        for (int i = 0; i < types.length; i++) {
            names[i] = types[i].getName();
        }
        return names;
    }
}
